package com.vhall.component.controller.pendant.facade;

import com.vhall.component.entity.page.vo.PageVO;
import com.vhall.component.entity.pendant.vo.*;
import com.vhall.component.plugin.common.annotation.TokenAuth;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

/**
 * console端接口--挂件
 *
 * @author guoxin.wang
 * @date 2021/10/29
 */
@FeignClient(value = "PendantConsoleFacade", path = "/v4/pendant/console")
public interface PendantConsoleFacade {

    /**
     * 控制台-创建挂件信息
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/create")
    Boolean create(@Validated PendantCreateOrUpdateReqVO reqVO);

    /**
     * 控制台-删除挂件信息
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/delete")
    Boolean delete(@Validated PendantDeleteReqVO reqVO);


    /**
     * 控制台-修改挂件信息
     *
     * @param reqVO
     * @return
     */
    @PostMapping("/edit")
    Boolean edit(@Validated PendantCreateOrUpdateReqVO reqVO);

    /**
     * 控制台-列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @GetMapping("/list")
    PageVO<PendantRspVO> list(@Validated PendantListReqVO reqVO);

    /**
     * 控制台-设置默认固定挂件
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/set-default-fixed")
    Boolean setDefaultFixed(@Validated PendantSetDefaultReqVO reqVO);

    /**
     * 控制台-房间-挂件统计信息列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/list-stats")
    PageVO<PendantListStatsRspVO> listStats(@Validated PendantListStatsReqVO reqVO);


    /**
     * 控制台-绑定或解绑
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/binding/operation")
    Boolean bindingOperation(@Validated BindingOperationReqVO reqVO);


    /**
     * 控制台-关联关键-已经关联列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @TokenAuth
    @PostMapping("/binding/list")
    List<PendantRspVO> bindingList(@Validated PendantListReqVO reqVO);

    /**
     * 控制台-关联关键-未关联列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/unbinding/list")
    PageVO<PendantRspVO> unbindingList(@Validated PendantListReqVO reqVO);

}
